| |
6.2. Розробка програмного забезпечення для PIC-мікроконтролерів
Розробка програмного забезпечення є центральним моментом загального процесу проектування. Центр важкості функціональних властивостей сучасних цифрових систем знаходиться саме в програмних засобах.
Основним інструментом для професійної розробки програм є асемблер, що припускає деталізацію на рівні команд МК. Тільки асемблер дозволяє максимально використовувати ресурси кристала.
Для мікроконтролерів PIC випущена велика кількість різних засобів розробки. В даному розділі мова піде про засоби, що надаються фірмою Microchip, які вельми ефективні і широко використовуються на практиці.
6.2.1. Асемблер MPASM
Асемблер MPASM є інтегрованим програмним середовищем для розробки програмних кодів PIC мікроконтролерів всіх сімейств. Випускається фірмою Microchip в двох варіантах: для роботи під DOS і для роботи під Windows 95/98/NT. Асемблер MPASM може використовуватися як самостійно, так і у складі інтегрованого середовища розробки MPLAB. Він включає декілька програм: власне MPASM, MPLINK і MPLIB, причому кожна з них володіє власним інтерфейсом.
Програма MPASM може використовуватися для двох цілей:
- генерації виконуваного (абсолютного) коду, призначеного для запису в МК за допомогою програматора;
- генерації переміщуваного об'єктного коду, який потім буде пов'язаний з іншими асемблерними або компілюючими модулями.
Виконуваний код є для MPASM вихідним кодом за замовчанням. При цьому всі змінні джерела повинні бути явно описані в тексті програми або у файлі, що підключається за допомогою директиви INCLUDE <filename>. Якщо при асемблюванні не виявляється помилок, то генерується вихідний .hex-файл, який може бути завантажений в МК за допомогою програматора.
При використовуванні асемблера MPASM в режимі генерації переміщуваного об'єктного коду формуються об'єктні модулі, які можуть бути згодом з'єднані з іншими модулями за допомогою компонувальника MPLINK. Програма-компонувальник MPLINK перетворить переміщувані об'єктні коди у виконуваний бінарний код, прив'язаний до абсолютних адрес МК. Бібліотечна утиліта MPLIB дозволяє для зручності роботи згрупувати переміщувані об'єкти в один файл або бібліотеку. Ці бібліотеки можуть бути зв'язані компонувальником MPLINK у файл вихідного об'єктного коду асемблера MPASM.
Програми MPASM і MPLINK доступні через оболонку MPASM, тоді як MPLIB доступна тільки з свого командного рядка.
Початковим файлом для асемблера MPASM за умовчанням є файл з розширенням .ASM. Текст початкового файлу повинен відповідати вимогам синтаксису, приведеним далі.
Асемблер MPASM може бути викликаний командним рядком
MPASM [/<Option>[ /<Option>...]] <file_name>
де /<Option> означає вибір режиму роботи асемблера в командному рядку; <file_name> - ім'я файлу на асемблювання.
Режими роботи асемблера, вибрані за умовчанням, приведені в табл. 6.1.
Таблиця 6.1. Режими роботи асемблера за умовчанням.
вибір |
значення за замовчуванням |
опис |
? |
N/A |
Викликати допомогу |
a |
INHX8M |
Генерувати апсолютний .COD і hex вихід безпосередньо з асемблера |
c |
On |
Вибрати/заборонити випадок чутливості |
e |
On |
Вибрати/заборонитиь файл помилок |
h |
N/A |
Відобразити панель помилок MPASM |
l |
On |
Вибрати/заборонити файл лістингу, генерований з макроасемблера |
m |
On |
Вибрати/заборонити макророзширення |
o |
N/A |
Встановити шлях для об»ектных файлів /o<path>\object.file |
p |
None |
Встановити тип процесора: /p<processor_type>; |
q |
Off |
Вибрати/заборонити скритий режим (заборонити вивід на екрар) |
r |
Hex |
Визначає тип числа за замовчуванням: /r<radix> |
w |
0 |
Визначає тип діагностичних повідомлень у файлі лістингу /w<level>, де <level> мож бути:
0 – повідомляти все,
1 – повідомляти про попередження і помилки,
2 – повідомляти лише про помилки. |
x |
Off |
Вибрати/заборонитиь перехресні ссилки у файлі лістингу. |
Тут і далі використовуються наступні угоди по використовуванню символів:
[ ] - для аргументів вибору;
< > - для виділення спеціальних ключів <TAB>, <ESC> або додаткового вибору;
| - для аргументів, що взаємовиключають один одного (вибір АБО);
рядкові символи - для позначення типу даних.
Вибір за умовчанням, приведений в табл. 6.1, може бути змінений командним рядком:
/<option> дозволяє вибір;
/<option>+ дозволяє вибір;
/<option>- забороняє вибір.
Початковий асемблерний файл створюється з використанням будь-якого ASCII текстового редактора. Кожна лінія початкового файлу може містити до чотирьох типів інформації:
- мітки (labels)
- мнемоніка (mnemonics)
- операнди (operands)
- коментар (comments)
Порядок і положення кожного типу має значення. Мітка повинна починатися в колонці номер один. Мнемоніка може починатися в колонці два або далі. Операнди йдуть за мнемонікою. Коментар може слідувати за операндом, мнемонікою або міткою або може починатися в будь-якому стовпці, якщо як перший не порожній символ використовується * або ;.
Максимальна довжина рядка 255 символів.
Один або декілька пропусків повинні відділяти мітку і мнемоніку або мнемоніку і операнд(и). Операнди можуть відділятися комами. Наприклад:
List p=16C54, r=HEX
ORG 0x1FF ;Вектор скидання
GOTO START ;Повернення на початок
ORG 0x000 ;Адрес початку виконання програми
START
MOVLW 0x0A ;Виконання програми
;PIC МК
MOVLW 0x0B ;Виконувати завжди
GOTO START
END
Мітки
В полі мітки розміщується символічне ім'я елемента пам'яті, в якій зберігається відзначений операнд. Всі мітки повинні починатися в колонці 1. За ними може слідувати двокрапка (:), пропуск, табуляція або кінець рядка. Коментар може також починатися в колонці 1, якщо використовується одне з позначень коментаря.
Мітка може починатися з символу або нижнього тире (_) і містити буквені символи, числа, нижні тире і знак питання. Довжина мітки може бути до 32 символів.
Мнемоніки
Мнемоніки є мнемонічними позначеннями команди, які безпосередньо транслюються в машинний код. Мнемоніки асемблерних інструкцій, директиви асемблера і макровиклики повинні починатися, принаймні, в колонці 2. Якщо є мітка на тій же лінії, вона повинна бути відокремлена від цієї мітки двокрапкою або одним або більше пропусками або табуляцією.
Операнди
В цьому полі визначаються операнди (або операнд), що беруть участь в операції. Операнди повинні бути відокремлені від мнемоніки одним або більш пропусками або табуляцією. Операнди відділяються один від одного комами. Якщо операція вимагає фіксованого номера (числа) або операндів, то все на лінії після операндів ігнорується. Коментарі дозволяються в кінці лінії. Якщо мнемоніки дозволяють використовувати різне число операндів, кінець списку операндів визначається кінцем рядка або коментарем.
Вирази використовуються в полі операнда і можуть містити константи, символи або будь-які комбінації констант і символів, розділених арифметичними операторами. Перед кожною константою або символом може стояти + або -, що указує на позитивний або негативний вираз.
В асемблері MPASM використовуються наступні формати виразів:
- текстовий рядок;
- числові константи і Radix;
- арифметичні оператори і пріоритети;
- High / Low оператори.
Текстовий рядок - це послідовність будь-яких допустимих ASCII символів (в десятковому діапазоні від 0 до 127), укладена в подвійні лапки. Рядок може мати будь-яку довжину в межах 132 колонок. За відсутності обмеження рядка вона вважається до кінця лінії. Якщо рядок використовується як буквений операнд, вона повинна мати довжину в один символ, інакше буде помилка.
Числова константа є числом, вираженим в деякій системі числення. Перед константою може стояти + або -. Проміжні величини в константах розглядаються як 32-розрядні цілі без знака.
MPASM підтримує наступні системи числення (представлення значень або Radix): шістнадцяткову, десяткову, вісімкову, двійкову і символьну. За умовчанням приймається шістнадцяткова система. Табл. 6.2 представляє різні системи числення.
Оператори - це арифметичні символи, подібні + і -, які використовуються при формуванні виразів. Кожний оператор має свій пріоритет. В загальному випадку пріоритет встановлюється зліва направо, а вирази в дужках оцінюються першими. В табл. 6.3 приведені позначення, описи і приклади вживання основних операторів MPASM.
Таблиця 6.2. Системи числення (Radix).
Тип |
Синтаксис |
Приклад |
десяткова |
D'<цифри>' або .<цифри> |
D'100' або .100 |
шістнадцяткова |
H'<цифри>' або 0x<цифри> |
H'9f' або 0x9f |
вісімкова |
O'<цифри>' |
O'777' |
двійкова |
B'<цифри>' |
B'00111001' |
символьна |
'<символ>' або A'<символ>' |
"C" або A'C' |
Таблица 6.3. Основні арифметичні оператори MPASM
Оператор |
Опис |
Приклад |
$ |
Поточний лічильниккоманд |
goto $ + 3 |
( |
Ліва дужка |
1 + ( d * 4 ) |
) |
Права дужка |
( lenght + 1 ) * 255 |
! |
операція «НІ» (логічна інверсія) |
if ! ( a - b ) |
~ |
доповнення |
flags = ~ flags |
- |
Інверсія (двійкове доповнення) |
– 1 * lenght |
High |
виділити старший байт слова |
movlw high llasid |
Low |
виділити молодший байт слова |
movlw low (llasid + .251) |
upper |
виділити найбільший байт слова |
movlw upper (llasid + .251) |
* |
множення |
a = c * b |
/ |
ділення |
a = b / c |
% |
Модуль |
lenght = totall % 16 |
+ |
додавання |
Tot_len = lenght * 8 + 1 |
- |
віднімання |
Entry_Son = ( Tot – 1 ) / 8 |
<< |
Зсув вліво |
Val = flags << 1 |
>> |
Зсув вправо |
Val = flags >> 1 |
>= |
Більше або рівне |
if ent >= num |
> |
більше |
if ent > num |
< |
меньше |
if ent < num |
<= |
Меньше або рівне |
if ent <= num |
== |
рівне |
if ent == num |
!= |
Не рівне |
if ent != num |
& |
Порозрядне «І» |
flags = flags & err_bit |
^ |
Порозрядне «виключне АБО» |
flags = flags ^ err_bit |
| |
Порозрядне «АБО» |
flags = flags | err_bit |
&& |
Логічне «І» |
if (len == 512)&&( b == c ) |
|| |
Логічне «АБО» |
if (len == 512 ) || ( b == c ) |
= |
Встановити рівним... |
entry_index = 0 |
++ |
збільшити на 1 (инкремент) |
i ++ |
— |
зменшити на 1 (декремент) |
i — |
Оператори high, low і upper використовуються для отримання одного байта з багатобайтового значення, відповідного мітці. Застосовуються для управління розрахунком точок динамічного переходу при читанні таблиць і запису програм.
Оператори інкремента і декремента можуть застосовуватися до змінної тільки як єдиний оператор в рядку. Вони не можуть бути вбудованим фрагментом складнішого виразу.
Коментарі
Поле коментаря може використовуватися програмістом для текстового або символьного пояснення логічної організації програми. Поле коментаря повністю ігнорується асемблером, тому в ньому можна застосовувати будь-які символи. Коментарі, які використовуються в рядку самі по собі, повинні починатися з символу коментаря (* або ;). Коментарі в кінці рядка повинні бути відокремлені від решти рядка одним або більше пропусками або табуляцією.
Розширення файлів, MPASM, що використовуються, і утилітами
Існує ряд розширень файлів, вживаних за умовчанням MPASM і зв'язаними утилітами. Призначення таких розширень приведені в табл. 6.4.
Таблиця 6.4. Призначення розширень файлів, що використовуються за умовчанням.
Розширення |
Призначення |
.ASM |
Вхідний файл асемблера для MPASM <source_name>.ASM |
.OBJ |
Вихідний файл переміщуваного об'єктного коду з MPASM <source_name>.OBJ |
.LST |
Вихідний файл лістингу, що генерується асемблером MPASM або MPLINK: <source_name>.LST |
.ERR |
Вихідний файл помилок з MPASM: <source_name>.ERR |
.MAP |
Вихідний файл розподілу пам'яті з MPASM: <source_name>.MAP |
.HEX |
Вихідний файл об'єктного коду в шістнадцятковому уявленні з MPASM: <source_name>.HEX |
.HXL/.HXH |
Вихідний файл об'єктного коду в шістнадцятковому уявленні з роздільним представленням молодших і старших байт: <source_name>.HXL, <source_name>.HXH |
.LIB |
Бібліотечний файл, створений MPLIB і прив'язаний компонувальником MPLINK: <source_name>.LIB |
.LNK |
Вихідний файл компонувальника: <source_name>.LNK |
.COD |
Вихідний символьний файл або файл відладчика. Формуються MPASM або MPLINK: <source_name>.COD |
Лістинг є текстовим файлом у форматі ASCII, який містить машинні коди, що згенерували відповідно до кожної асемблерної команди, директиви асемблера або макрокоманди початкового файлу. Файл лістингу містить: ім'я продукту і версії, дату і час, номер сторінки зверху кожної сторінки.
До складу лістингу входять також таблиця символів і карта розподілу пам'яті. В таблиці символів перераховуються всі символи, які є в програмі, і де вони визначені. Карта розподілу пам'яті дає графічне уявлення про витрачання пам'яті МК.
Директиви мови
Директиви мови - це асемблерні команди, які зустрічаються в початковому коді, але не транслюються прямо у виконувані коди. Вони використовуються асемблером при трактуванні мнемоніки вхідного файлу, розміщенні даних і формуванні файлу лістингу.
Існує чотири основні типи директив в MPASM:
- директиви даних;
- директиви лістингу;
- управляючі директиви;
- макро-директиви.
Директиви даних управляють розподілом пам'яті і забезпечують доступ до символічних позначень даних.
Директиви лістингу управляють лістингом файлу MPASM і форматом. Вони визначають специфікацію заголовків, генерацію сторінок і інші функції управління лістингом.
Директиви управління дозволяють провести секціонування звичайного асемблерного коду.
Макро-директиви управляють виконанням і розподілом даних в межах визначень макротіла.
Нижче приводиться опис деяких директив асемблера MPASM, що використовуються в даному навчальному посібнику.
CODE - початок секції об'єктного коду
Синтаксис:
[<label>] code [ROM address>]
Використовується при генерації об'єктних модулів. Оголошує початок секції програмного коду. Якщо <label> не вказана, секція буде названа code. Стартова адреса встановлюється рівним вказаному значенню або нулю, якщо адреса не була вказана.
Приклад:
RESET code H'01FF'
goto START
#DEFINE - визначити мітку заміни тексту
Синтаксис:
#define <name> [<string>]
Директива задає рядок <string>, що заміщає мітку <name> всякий раз, коли та зустрічатиметься в початковому тексті.
Символи, які визначені директивою #DEFINE, не можуть бути проглянуті симулятором. Використовуйте замість цієї директиви EQU.
Приклад
#define length 20
#define control 0x19,7
#define position (X,Y,Z) (y-(2 * Z +X)).
test_label dw position(1, length, 512)
bsf control ; встановити в 1 біт 7 в f19
END - кінець програмного блоку
Синтаксис:
end
Визначає кінець програми. Після зупинки програми таблиця символів скидається у файл лістингу.
Приклад:
start ;виконуваний код
;
end ; кінець програми
EQU - визначити асемблерну константу
Синтаксис:
<label> equ <expr>
Тут <expr> - цей правильний MPASM вираз. Значення виразу привласнюється мітці <label>.
Приклад:
four equ 4 ; привласнює чисельне значення
; мітці four
INCLUDE - включити додатковий файл джерела
Синтаксис:
include <<include_file>>
include "<include_file>"
Визначуваний файл прочитується як джерело коду. Після закінчення файлу, що включається, продовжуватиметься асемблювання вихідного коду програми. Допускається до шести рівнів вкладеності. <include_file> може бути укладений в лапки або кутові дужки. Якщо вказаний повний шлях до файлу, то пошук відбуватиметься тільки по цьому шляху. Інакше порядок пошуку наступний: поточний робочий каталог, каталог, в якому знаходиться вихідний код програми, каталог MPASM.
Приклад:
include "з:\sys\sysdefs.inc" ; system defs
include <addmain.asm> ; register defs
LIST - встановити параметри лістингу
Синтаксис:
list [<list_option>, <list_option>]
Директива <list> дозволяє вивід лістингу, якщо він до цього був заборонений. Крім того, один з параметрів лістингу може бути змінений для управління процесом асемблювання відповідно до табл. 6.5.
Таблиця 6.5. Параметри, що використовуються директивою list.
Параметр |
Значення за замовчуванням |
Опис |
C=nnn |
80 |
Кількість символів в рядку |
n=nnn |
59 |
Кількість рядків на сторінці |
t=ON|OFF |
OFF |
Укорочувати рядки лістингу |
p=<type> |
None |
Встановити тип процесора: PIC16C54, PIC16C84, PIC16F84, PIC17C42 і ін. |
r=<radix> |
HEX |
Встановити систему числення за умовчанням: hex, dec, осt. |
w=<level> |
0 |
Встановити рівень повідомлень діагностики у файлі лістингу:
0 - виводити всі повідомлення;
1 - виводити попередження і помилки;
2 - виводити тільки помилки. |
x=ON|OFF |
OFF |
Включити або вимкнути макророзширення. |
NOLIST - вимкнути вихід лістингу
Синтаксис:
NOLIST
ORG - встановити початкову адресу програми
Синтаксис:
<label> org <expr>
Встановлює початкову адресу програми для подальшого коду відповідно до адреси в <expr>. MPASM виводить переміщуваний об'єктний код, а MPLINK розмістить код за певною адресою. Якщо мітка <label> визначена, то їй буде привласнена величина <expr>. За умовчанням початкова адреса має нульове значення. Директива може не використовуватися, якщо створюється об'єктний модуль.
Приклад:
int_1 org 0x20; Перехід по вектору 20
int_2 org int_1+0x10; Перехід по вектору 30
PROCESSOR - встановити тип процесора
Синтаксис:
processor <processor_type>
Встановлює тип процесора <processor_type>, що використовується: [16C54 | 16C55 | 16C56 | 16C57 | 16C71 | 16C84 | 16F84 | 17C42]. Загальні процесорні сімейства можуть бути вибрані як:[16C5X | 16CXX | 17CXX]
Для підтримки сумісності з новими виробами вибирається максимум доступної пам'яті.
SET - визначити асемблерну змінну
Синтаксис:
<label> set <expr>
Директива SET функціонально еквівалентна директиві EQU, за винятком того, що величина, визначувана SET, може бути змінена директивою SET.
Приклад:
area set 0
widthset 0x12
length set 0x14
area set length * width
length set length + 1
TITLE - Визначити програмний заголовок
Синтаксис:
title "<title_text>"
Ця директива встановлює текст, який використовується у верхній лінії сторінки лістингу. <title_text> - це ASCII послідовність, укладена в подвійні дужки. Вона може бути до 60 символів завдовжки.
Приклад
title "operational code, rev 5.0"
6.2.2. Компонувальник MPLINK
Абсолютний (непереміщуваний) код програми генерується безпосередньо при асемблюванні і розташовується в програмній пам'яті в порядку проходження операторів програми. Оператори переходу на мітку зразу ж замінюються відповідним кодом переходу на адресу мітки.
При генерації переміщуваного коду кожна секція програмного коду повинна починатися директивою CODE. Остаточне розміщення програмних кодів, розстановку фізичних адрес переходів виконує компонувальник MPLINK.
Компонувальник MPLINK виконує наступні задачі:
- розподіляє коди і дані, тобто визначає, в якій частині програмної пам'яті будуть розміщені коди і в яку область ОЗП будуть поміщені змінні;
- розподіляє адреси, тобто привласнює посиланням на зовнішні об'єкти в об'єктному файлі конкретні фізичні адреси;
- генерує виконуваний код, тобто видає файл у форматі .hex, який може бути записаний в пам'ять МК;
- відстежує конфлікти адрес, тобто гарантує, що програма або дані не розміщуватимуться в просторі адрес, який вже зайнятий;
- надає символьну інформацію для відладки.
Для більш докладного вивчення роботи компонувальника слід звернутися до спеціальної літератури.
6.2.3. Менеджер бібліотек MPLIB
Менеджер бібліотек дозволяє створювати і модифікувати файли бібліотек. Бібліотечний файл є колекцією об'єктних модулів, які розміщені в одному файлі. MPLIB використовує об'єктні модулі з ім'ям типу «filename.o» формату COFF (Common Object File Format).
Використовування бібліотечних файлів спрощує компоновку програми, робить її більш структурованою і полегшує її модифікацію.
6.2.4. Симулятор MPSIM
Симулятор MPSIM є симулятор подій, призначений для відладки програмного забезпечення PIC-контролерів. MPSIM моделює всі функції контролера, включаючи всі режими скидання, функції таймера/лічильника, роботу сторожового таймера, режими SLEEP і Power-down, роботу портів вводу/виводу.
MPSIM запускається з командного рядка DOS, конфігурується користувачем і безпосередньо застосовує вихідні дані асемблера MPASM.
Перед використовуванням симулятора необхідно відасемблювати початковий файл <file_name>.asm і одержати файл об'єктного коду у форматі INHX8M, створюваний MPASM за умовчанням:
MPASM <file_name>.asm <RETURN>
Щоб запустити симулятор, необхідно набрати в командному рядку
MPSIM<RETURN>.

Мал. 6.2. Вид робочого вікна симулятора MPSIM.
Вид екрану, одержуваного при запуску MPSIM, показаний на мал. 6.2. Екран роздільний на три частини, або вікна. У верхньому вікні показаний поточний стан моделювання, включаючи модельовану програму, тип МК, число виконаних командних циклів і час, що затрачується на них. Середнє вікно використовується для виводу вмісту регістрів користувача. Набір регістрів і формат даних, що виводяться на екран, визначаються файлом MPSIM.INI, який далі буде описаний докладніше. Нижнє вікно містить запрошення на введення команд, а також поточні операції і результат їх виконання.
При запуску симулятор MPSIM починає шукати командний файл MPSIM.INI. Цей текстової файл створюється користувачем і використовується для завдання всіх задіяних в програмі параметрів.
Один з прикладів файлу MPSIM.INI приведений нижче.
Приклад файлу MPSIM.INI
;******************************************************
;*листинг исходной программы
;******************************************************
LIST P=16C84, R=HEX ;директива, определяющая тип
;процессора и систему счисления
;по умолчанию
;******************************************************
;*описание используемых переменных и назначения адресов
;*ячеек для хранения переменных пользователя
;******************************************************
; INTCON EQU 0x0B
; OPTION EQU 0x81
; TMR0 EQU 0x01
; INTF EQU 1
; T0IF EQU 5
PCL EQU 0x02
STATUS EQU 0x03
RP0 EQU 5
PORTA EQU 0x05
PORTB EQU 0x06
TRISA EQU 0x05
TRISB EQU 0x06
W EQU 0
F EQU 1
TEMPA EQU 0x0C
TEMPB EQU 0x0D
COUNT1 EQU 0x0E
COUNT2 EQU 0x0F
COUNT3 EQU 0x10
;******************************************************
;*определение меток замены текста
;******************************************************
#DEFINE Z STATUS,2 ;бит нулевого результата
#DEFINE BA1 PORTA,0 ;динамик BA1
#DEFINE VD2 PORTA,1 ;светодиод VD2
#DEFINE SA1 PORTA,2 ;тумблер SA1
#DEFINE SA2 PORTA,3 ;тумблер SA2
#DEFINE SB1 PORTA,4 ;кнопка SB1
#DEFINE SB2 PORTB,0 ;кнопка SB2
#DEFINE HL1_A PORTB,1 ;индикатор-сегмент A
#DEFINE HL1_B PORTB,2 ;индикатор-сегмент B
#DEFINE HL1_C PORTB,3 ;индикатор-сегмент C
#DEFINE HL1_D PORTB,4 ;индикатор-сегмент D
#DEFINE HL1_E PORTB,5 ;индикатор-сегмент D
#DEFINE HL1_F PORTB,6 ;индикатор-сегмент E
#DEFINE HL1_G PORTB,7 ;индикатор-сегмент F
;******************************************************
;*исполняемая программа
;******************************************************
ORG 0x000 ;установка начального адреса по
;сбросу
GOTO BEGIN ;переход на начало программы
ORG 0x005 ;установка начального адреса
;размещения программы
BEGIN
CALL INIT_PORTS ;вызов подпрограммы
;инициализации портов МК
;*****************************************************
;*программа пользователя
;
;*****************************************************
;
INIT_PORTS ;подпрограмма инициализации
;портов
MOVLW 0xFF ;установка линий портов
MOVWF PORTA ;A и B в единичное
MOVWF PORTB ;состояние
BSF STATUS,RP0 ;переход на банк 1
MOVLW 0x1C ;настройка линий RA0 и
MOVWF TRISA ;RA1 порта A на вывод –
;остальных – на ввод
MOVLW 0x01 ;настройка линии RB0
MOVWF TRISB ;порта B на ввод -
;остальных – на вывод
BCF STATUS,RP0 ;возврат в банк 0
RETURN ;возврат из подпрограммы
;
END ;конец программы
В представленому файлі вказані: тип мікроконтролера, система числення даних за умовчанням, регістри, вміст яких виводиться на екран, спосіб представлення даних, робочі параметри. Будь-яка команда, яка виконується MPSIM, може бути задана у файлі MPSIM.INI, який визначає початковий стан програми. При роботі MPSIM створює файл MPSIM.JRN, в якому зберігаються всі відомості про натиснення клавіш в процесі роботи.
У файлі MPSIM.INI допускається вводити коментарі, які даються після знака «;», але не допускається використовування порожніх рядків.
Основні команди, вживані в симуляторі MPSIM, приведені в табл. 6.6. Коли ці команди вводяться в сеансі роботи з MPSIM, вони заносяться у файл MPSIM.JRN, який використовується при створенні розширеного файлу MPSIM.INI. Даний файл можна задіювати для виявлення помилок і забезпечення нормального виконання програми після виправлення коду.
Таблиця 6.6. Основні команди симулятора MPSIM.
Команда |
Параметр |
Коментар |
AB |
- |
Переривання поточної сесії |
AD |
Reg[, Radix[, Digits]] |
Вивід вмісту регістра на екран у вказаному форматі і заданій системі числення X, B або D |
B |
[addr] |
Установка точки зупинки за поточною або вказаною адресою |
C |
[#break] |
Продовження виконання програми з пропуском вказаної кількості наступних точок зупинки |
DB |
- |
Вивід на екран всіх активних точок зупинки |
DI |
[addr1[,addr2]] |
Вивід на екран фрагмента пам'яті програм |
DR |
- |
Вивід вмісту всіх регістрів |
DW |
[E|D] |
Дозвіл/заборона функціонування сторожового таймера |
E |
[addr] |
Виконання програми з поточної або вказаної адреси |
F |
Reg |
Вивід на екран вмісту регістра і можливість його редагування користувачем |
GE |
filename |
Отримання і виконання командного файлу. Це спосіб завантаження командного файлу .INI |
GO |
- |
Запуск МК і початок виконання програми |
IP |
[time|step] |
Введення вхідних дій відповідно до значення параметра step у файлі Stimulus |
LO |
filename |
Завантаження в MPSIM файлів .HEX і .COD |
M |
addr |
Вивід на екран вмісту пам'яті програм, починаючи з адреси «addr» і можливість його редагування. Введення «Q» завершує команду. |
P |
device |
Вибір типу модельованого МК |
Q |
- |
Вихід з MPSIM і запис команд у файл .JRN |
RE |
- |
Скидання часу виконання і лічильника циклів |
RS |
- |
Скидання модельованого МК |
SE |
pin|port |
Вивід на екран стану вказаного виводу або порту і можливість його зміни |
SR |
O|X|D |
Установка системи числення за умовчанням |
SS |
[addr] |
Покрокове виконання, починаючи з вказаної адреси. За відсутності адреси - виконання йде з поточного місця |
ST |
filename |
Завантаження файлу стимуляції |
W |
|
Відображення стану регістра W з можливістю його модифікації |
ZM |
addr1,addr2 |
Очищення пам'яті програм з адреси addr1 по addr2 |
ZR |
- |
Скидання всіх регістрів МК |
ZT |
- |
Скидання таймера/лічильника МК |
Для моделювання зовнішніх тестових подій (дій) на модельований МК використовуються файли стимуляції з розширенням .STI. Ці файли використовуються MPSIM для того, щоб забезпечити подачу однократних і повторюються вхідних сигналів в процесі виконання програми. При цьому можна спостерігати на екрані, як МК реагує на сигнали.
Як приклад нижче приведений файл для тестування програми, що виконує опит стану лінії 1 порту А.
! test1.STI
STEP RA1
1 1 !Установка на вході RA1 стану "1"
200 0 !Поступлення на вхід RA1 сигналу "0"
1000 1 !Перехід сигналу на вході RA1 в "1"
1200 0 !Повторна подача нульового сигналу
Файл дії складається з безлічі станів, для яких задається параметр STEP, що визначає число циклів, протягом яких підтримується вказаний стан. Він дозволяє одночасно подавати сигнали на різні висновки МК. У файлі дії можна вказати будь-який вивід МК, у тому числі і вивід скидання (_MCLR). Для позначення коментарів використовується знак !.
попередня тема наступна тема
|